import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException {
        // InputStream类似，OutputStream也是抽象类，它是所有输出流的超类。
        // OutputStream也提供了close()方法关闭输出流，以便释放系统资源。
        // 要特别注意：OutputStream还提供了一个flush()方法，它的目的是将缓冲区的内容真正输出到目的地。
        // 和InputStream一样，OutputStream的write()方法也是阻塞的。
        writeFile();

        // 读取input.txt，写入output.txt:
        try (InputStream input = new FileInputStream("input.txt");
                OutputStream output = new FileOutputStream("output.txt")) {
            input.transferTo(output); // transferTo的作用是?
        }
    }

    public static void writeFile() throws IOException {
        OutputStream output = new FileOutputStream("./readme.txt");
        output.write(72); // H
        output.write(101); // e
        output.write(108); // l
        output.write(108); // l
        output.write(111); // o
        output.close();
    }

    public void writeByteFile() throws IOException {
        OutputStream output = new FileOutputStream("./readme.txt");
        output.write("Hello".getBytes("UTF-8")); // Hello
        output.close();
    }

    public void tryWriteFile() throws IOException {
        try (OutputStream output = new FileOutputStream("out/readme.txt")) {
            output.write("Hello".getBytes("UTF-8")); // Hello
        } // 编译器在此自动为我们写入finally并调用close()
    }

}